iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0

Rotate Array (LeetCode 189)

thoughts

  • 將陣列右旋轉 k 步。
  • 常見解法:
    • 使用額外陣列 (O(n) 空間)
    • 反轉法 (O(1) 空間):
    • 反轉整個陣列
    • 反轉前 k 部分
    • 反轉後 n-k 部分

kotlin

class Solution {
    fun rotate(nums: IntArray, k: Int) {
        val n = nums.size
        val step = k % n
        reverse(nums, 0, n - 1)
        reverse(nums, 0, step - 1)
        reverse(nums, step, n - 1)
    }

    private fun reverse(nums: IntArray, l: Int, r: Int) {
        var left = l
        var right = r
        while (left < right) {
            val tmp = nums[left]
            nums[left] = nums[right]
            nums[right] = tmp
            left++
            right--
        }
    }
}

follow up

  • 如果 nums 非常大,不允許複製陣列,怎麼處理?(必須 O(1) 空間 in-place)
  • 如果 nums 是 串流資料,只能單向讀取,怎麼旋轉?
  • 如果 k 很大(例如 10^9),如何最佳化?

上一篇
#14
系列文
來都來了-涮就涮吧16
  1. 12
    #11
  2. 13
    #12
  3. 14
    #13
  4. 15
    #14
  5. 16
    #15
完整目錄
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言